Multi-threaded processing is performed on computing systems that have multiple processors that are simultaneously operating. Oftentimes, multiple threads may share the same memory. However, multi-threaded applications that run with shared memory can often lead to subtle data race defects that are often difficult to find through testing. For example, data race defects may result from the failure to acquire a lock before accessing shared memory, or perhaps the failure to take memory-ordering semantics into account in lock-free or low-lock algorithms. Data race defects can result in processes accessing inconsistent data, thereby adversely affecting the functionality of the multi-threaded applications.
Many dynamic race detection techniques have been developed. However, by their very nature, “dynamic” race detection involves actually running the application to detect behavior of the executing application, which may not be practical. Static race detection techniques have also been developed, which do not require execution of the application, but rather examine the code of the multi-threaded application. Such static race detection techniques are often computationally intensive and/or rely on annotations in the code in order to identify potential data race problems.